package com.java.wrapper;

import org.junit.Test;

/**
 * @author Lenl
 * @create 2021-05-30 10:41
 *
 * 包装类的使用
 *  1.java提供了八种基本数据类型的包装类，使得基本数据类型变量具有类的特性
 *  2.掌握的：基本数据类型、包装类、String三者间的转换
 *  3.JDK5.0新特性自动装箱与拆箱
 */
public class WrapperTest {
    //基本数据类型--》包装类，调用包装类的构造器
    @Test
    public void test1(){
        //Integer
        int num1=10;
        Integer in1=new Integer(num1);
        Integer in2=num1;//自动装箱
        int num2=in2;//自动拆箱
        Integer in3=new Integer("321");
        System.out.println(in1.toString());
        System.out.println(in2.toString());
        System.out.println(in3.intValue());

        //Float
        Float f1=new Float(12.3f);
        Float f2=new Float("12.5f");
        System.out.println(f1.toString());
        System.out.println(f2.toString());

        //特殊的 Boolean
        Boolean b1=new Boolean(true);
        Boolean b2=new Boolean("TrUe");
        Boolean b3=new Boolean("131dsaw");
        System.out.println("b1:"+b1.toString()+"-b2:"+b2.toString()+"-b3:"+b3.toString());

    }

    //包装类--》基本数据类型
    @Test
    public void test2(){
        Integer in1=123;
        int i1= in1.intValue();
        System.out.println(in1);
        System.out.println(i1);
    }

    //基本数据类型、包装类--》String类型
    @Test
    public void test3(){
        //方式1，连接运算
        int num1=10;
        String str1=num1+"";
        System.out.println(str1);
        //方式2，
        float f1=12.3f;
        String str2=String.valueOf(f1);
        System.out.println(str2);
    }
    //String类型--》基本数据类型、包装类:调用包装类的parseXxx(String s)
    @Test
    public  void test4(){
        //非子父类无法强砖
        String str1="123";
        int in1=Integer.parseInt(str1);

    }


    /*
    * 包装类相关面试题
    *
    * */
    @Test
    public void Q1(){
        Object o1=true?new Integer(1):new Double(2.0);
        System.out.println(o1); // 1.0 三元运算符要求两边类型一致，会有类型提升
    }

    @Test
    public  void Q2(){
        Object o2;
        if(true){
            o2=new Integer(1);
        }else{
            o2=new Double(2.0);
        }
        System.out.println(o2);// 1
    }

    @Test
    public  void Q3(){
        Integer m=new Integer(1);
        Integer n=new Integer(1);
        System.out.println(m==n);//false

        Integer i=1;
        Integer j=1;
        System.out.println(i==j);//true

        Integer x=128;
        Integer y=128;
        //内部方法IntegerCache缓存了-128-127的常用数，造成大于127的需要new一下，从而false
        System.out.println(x==y);//false
    }

}
